package com.example.demo.generic;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author CHAS
 * 2024/8/21 22:14
 **/

public class GenericCorrelation {
    //    public static void main(String[] args) {
//        ArrayList<String> array = new ArrayList<>();
//        array.add("hello");
//        array.add("world");
//        array.add("java");
//        for (int i=0;i<array.size();i++) {
//            System.out.println((String)array.get(i));
//        }
//    }
//    public static void main(String[] args) {
//        MyArrayList<String> list = new MyArrayList<>();
//        list.add("hello");
//        list.add("world");
//        list.add("java");
//        list.add("java");
//        list.add("java");
//        list.add("java");
//        list.add("java");
//        list.add("java");
//        list.add("java");
//        list.add("java");
////        list.add("java");//超过会报java.lang.ArrayIndexOutOfBoundsException: 10
//        System.out.println(list);
//    }
//    public static void main(String[] args) {
//        ListUtil listUtil = new ListUtil();
//        ArrayList<String> list = new ArrayList<>();
//        listUtil.addAll(list,"hello","world","java");
//        System.out.println(list);
//        listUtil.addAll(list,"java1","java2","java3","java4");
//        System.out.println(list);
//    }

    public static void main(String[] args) {
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        method(list1);
//        method(list2);//此时就会编译错误
        list1.add(new Ye());
        list1.add(new Fu());
        list1.add(new Zi());
        method(list1);
        methodV2(list1);
        methodV2(list2);
        methodV2(list3);
    }
    public static void method(ArrayList<Ye> list1){}
    public static void methodV2(ArrayList<? extends Ye> list1){}
}


class MyArrayList<E> {
    Object[] arr = new Object[10];
    int size = 0;

//    public boolean add(E e) {
//        arr[size++] = e;
//        return true;
//    }

    public E get(int index) {
        return (E) arr[index];
    }

    @Override
    public String toString() {
        return Arrays.toString(arr);
    }
    public <E> boolean add(E e){
        arr[size++] = e;
        return true;
    }
}
class ListUtil{
    public <E> void addAll(ArrayList<E> list, E e1,E e2,E e3){
        list.add(e1);
        list.add(e2);
        list.add(e3);
    }
    public <E> void addAll(ArrayList<E> list,E ... e){
        for(E e1:e){
            list.add(e1);
        }
    }
}
class Ye{}
class Fu extends Ye{}
class Zi extends Ye{}